package cn.dakaqi.utils.img;

import cn.dakaqi.utils.qiniu.QNiuToken;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.qiniu.api.io.IoApi;
import com.qiniu.api.io.PutExtra;
import com.qiniu.api.io.PutRet;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Map;
import java.util.ResourceBundle;


public class ImageAddText
{
    public String addTextBack(Map<String,String> map)throws  Exception
    {
        ResourceBundle bundle = ResourceBundle.getBundle ("resources/parameter");
        String file = bundle.getString("member-certificate-file");
        String savePath = bundle.getString("member-certificate-path");

        //1.jpg是你的 主图片的路径(母板 MemberCertificate.jpg)
        InputStream is = new FileInputStream(file);
        //通过JPEG图象流创建JPEG数据流解码器
        JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
        //解码当前JPEG数据流，返回BufferedImage对象
        BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
        //得到画笔对象
        Graphics g = buffImg.getGraphics();
        //  请勿删除，添加小图方法
        //        //创建你要附加的图象。
        //        //2.jpg是你的小图片的路径
        //        ImageIcon imgIcon = new ImageIcon("d:\\2.png");
        //
        //        //得到Image对象。
        //        Image img = imgIcon.getImage();
        //
        //        //将小图片绘到大图片上。
        //        //5,300 .表示你的小图片在大图片上的位置。
        //        g.drawImage(img,5,330,null);
        //设置颜色。
        g.setColor(Color.BLACK);
        //最后一个参数用来设置字体的大小
        Font f = new Font("宋体",Font.BOLD,30);
        g.setFont(f);

        //10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
        //姓名
        g.drawString(map.get("realName"),350,260);
        //公益时间
        f = new Font("宋体",Font.BOLD,20);
        g.setFont(f);
        g.drawString(Integer.parseInt(map.get("allTimes"))/60 + "小时"+Integer.parseInt(map.get("allTimes"))%60+"分钟",350,335);

        //认证情况
        f = new Font("宋体",Font.BOLD,16);
        g.setFont(f);
        g.drawString("已认证公益时间:"+Integer.parseInt(map.get("volunteerTime"))/60+"小时"+Integer.parseInt(map.get("volunteerTime"))%60+"分钟 社会时间:"+(Integer.parseInt(map.get("allTime"))-Integer.parseInt(map.get("volunteerTime")))/60+"小时"+(Integer.parseInt(map.get("allTime"))-Integer.parseInt(map.get("volunteerTime")))%60+"分钟",175,395);

        //分布情况
        f = new Font("宋体",Font.BOLD, 16);
        g.setFont(f);
        g.drawString("南通市:100小时 南京市:100小时 淮安市:57小时35分钟",175,420);


        //流水号
        f = new Font("宋体",Font.BOLD,15);
        g.setFont(f);
        g.drawString(""+System.currentTimeMillis (),155,507);
        //编号
        f = new Font("宋体",Font.BOLD,15);
        g.setFont(f);
        g.drawString(map.get("volunteerCode"),690,507);

        g.dispose ();



        String path = savePath + map.get("volunteerCode") + "-" + System.currentTimeMillis () + ".jpg";
        OutputStream os = new FileOutputStream(path);

        //创键编码器，用于编码内存中的图象数据。

        JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
        en.encode(buffImg);
        is.close();
        os.close();
        System.out.println ("合成结束。。。。。。。。" + path);
        PutRet ret = IoApi.putFile(QNiuToken.token(QNiuToken.SCOPE), null, path, new PutExtra());
        String json = ret.response;
        JSONObject obj = JSON.parseObject(json);
        String name = obj.get("key").toString();//key指七牛返回的文件名
        return QNiuToken.QINIU_DOMAIN+"/"+name;
    }

    public String addText(Map<String,String> map,String sn)throws  Exception
    {
        ResourceBundle bundle = ResourceBundle.getBundle ("resources/parameter");
        String file = bundle.getString("member-certificate-file");
        String savePath = bundle.getString("member-certificate-path");

        //1.jpg是你的 主图片的路径(母板 MemberCertificate.jpg)
        InputStream is = new FileInputStream(file);
        //通过JPEG图象流创建JPEG数据流解码器
        JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
        //解码当前JPEG数据流，返回BufferedImage对象
        BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
        //得到画笔对象
        Graphics g = buffImg.getGraphics();
        Graphics2D g2d = (Graphics2D)g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        //
        //        //创建你要附加的图象。
        //        //2.jpg是你的小图片的路径
        //        ImageIcon imgIcon = new ImageIcon("d:\\2.png");
        //
        //        //得到Image对象。
        //        Image img = imgIcon.getImage();
        //
        //        //将小图片绘到大图片上。
        //        //5,300 .表示你的小图片在大图片上的位置。
        //        g.drawImage(img,5,330,null);

        //设置颜色。
        g2d.setColor(Color.black);
        //最后一个参数用来设置字体的大小
        Font f = new Font("Microsoft YaHei",0,36);
        g2d.setFont(f);

        //10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
        //姓名
        g2d.drawString("志愿者 "+map.get("realName"),390,305);
        //公益时间
        f = new Font("Microsoft YaHei",0,36);
        g2d.setColor(Color.red);
        g2d.setFont(f);
        g.drawString(Integer.parseInt(map.get("allTimes"))/60 + "小时"+Integer.parseInt(map.get("allTimes"))%60+"分钟",300,383);

        //认证情况
        f = new Font("Microsoft YaHei",0,14);
        g2d.setFont(f);
        g2d.drawString("公益时间认证情况 : ", 270, 440);
        g2d.setColor(Color.BLACK);
        g.drawString("已认证公益时间:"+Integer.parseInt(map.get("volunteerTime"))/60+"小时"+Integer.parseInt(map.get("volunteerTime"))%60+"分钟 社会时间:"+(Integer.parseInt(map.get("allTime"))-Integer.parseInt(map.get("volunteerTime")))/60+"小时"+(Integer.parseInt(map.get("allTime"))-Integer.parseInt(map.get("volunteerTime")))%60+"分钟",400,440);

        //分布情况
        //        f = new Font("Microsoft YaHei",Font.BOLD, 16);
        //        g.setFont(f);
        //        g.drawString("南通市:100小时 南京市:100小时 淮安市:57小时35分钟",175,420);


        g2d.setColor(Color.black);
        //流水号
        f = new Font("Microsoft YaHei",0,14);
        //String curMonth = new SimpleDateFormat ("yyyyMMddHHmmssSSS").format(c.getTime());
        g2d.setFont(f);
        g2d.drawString(sn,245,640);
        //编号
        f = new Font("Microsoft YaHei",0,15);
        g2d.setFont(f);
        g2d.drawString(map.get("volunteerCode"),785,640);

        g2d.dispose ();

        String path = savePath + map.get("volunteerCode")+ "-" + System.currentTimeMillis () + ".jpg";
        OutputStream os = new FileOutputStream(path);

        //创键编码器，用于编码内存中的图象数据。
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder (os);
        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam (buffImg);
        param.setQuality((float) 500/ 100.0f, false);
        encoder.setJPEGEncodeParam (param);
        encoder.encode(buffImg);
        is.close();
        os.close();
        //System.out.println ("证书合成结束。。。。。。。。");

        PutRet ret = IoApi.putFile(QNiuToken.token(QNiuToken.SCOPE), null, path, new PutExtra());
        String json = ret.response;
        JSONObject obj = JSON.parseObject(json);
        String name = obj.get("key").toString();//key指七牛返回的文件名
        //删除上传的临时文件
        File file2 = new File(path);
        if(file2.exists())
            file2.delete();

        return QNiuToken.QINIU_DOMAIN+"/"+name;
    }
    public static void main(String[]args) throws Exception
    {

        //1.jpg是你的 主图片的路径
        InputStream is = new FileInputStream("d:\\MemberCertificate.jpg");
        //通过JPEG图象流创建JPEG数据流解码器
        JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
        //解码当前JPEG数据流，返回BufferedImage对象
        BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
        //得到画笔对象
        Graphics g = buffImg.getGraphics();
        Graphics2D g2d = (Graphics2D)g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//
//        //创建你要附加的图象。
//        //2.jpg是你的小图片的路径
//        ImageIcon imgIcon = new ImageIcon("d:\\2.png");
//
//        //得到Image对象。
//        Image img = imgIcon.getImage();
//
//        //将小图片绘到大图片上。
//        //5,300 .表示你的小图片在大图片上的位置。
//        g.drawImage(img,5,330,null);



        //设置颜色。
        g2d.setColor(Color.black);
        //最后一个参数用来设置字体的大小
        Font f = new Font("Microsoft YaHei",0,36);
        g2d.setFont(f);

        //10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
        //姓名
        g2d.drawString("志愿者 张春洋",390,305);
        //公益时间
        f = new Font("Microsoft YaHei",0,36);
        g2d.setColor(Color.red);
        g2d.setFont(f);
        g2d.drawString("总公益时间 : 5小时0分钟",300,383);


        //认证情况
        f = new Font("Microsoft YaHei",0,14);
        g2d.setFont (f);
        g2d.drawString ("公益时间认证情况 : ", 270, 440);
        g2d.setColor(Color.BLACK);
        g2d.drawString("已认证公益时间 900小时59分钟  /  社会时间:57小时15分钟",400,440);
        //分布情况
//        f = new Font("Microsoft YaHei",Font.BOLD, 16);
//        g.setFont(f);
//        g.drawString("南通市:100小时 南京市:100小时 淮安市:57小时35分钟",175,420);


        g2d.setColor(Color.black);
        //流水号
        f = new Font("Microsoft YaHei",0,14);
        Calendar c = Calendar.getInstance ();
        String curMonth = new SimpleDateFormat ("yyyyMMddHHmmssSSS").format(c.getTime());
        g2d.setFont(f);
        g2d.drawString(curMonth,245,640);
        //编号
        f = new Font("Microsoft YaHei",0,15);
        g2d.setFont(f);
        g2d.drawString("0000000001",785,640);

        g2d.dispose ();

        OutputStream os = new FileOutputStream("d:\\MemberCertificate-new.jpg");

        //创键编码器，用于编码内存中的图象数据。

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder (os);
        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam (buffImg);
        param.setQuality((float) 500/ 100.0f, false);
        encoder.setJPEGEncodeParam (param);
        encoder.encode(buffImg);


        is.close();
        os.close();

        System.out.println ("合成结束。。。。。。。。");



    }

}


